iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Software Development

Java入門的30張門票系列 第 19

[Day19] 看似不重要其實控制一切 - 修飾子

  • 分享至 

  • xImage
  •  

之前在封裝的時候有談過存取修飾子,今天會再提到一次以及介紹其他的修飾子~那就開始吧/images/emoticon/emoticon08.gif

存取控制修飾子

存取修飾子主要是控制類別間能不能互相存取的要素。這類修飾子分成三種,有public、protected和private,但準確來說分成四種權限範圍。這邊會討論到四種情況:

  1. 同一類別 (class)
  2. 同一套件 (package)
  3. 子類別 (subclass)
  4. 不同套件 (world)
    在變數方法上,能不能存取就是看能不能透過點運算子直接存取、呼叫。如果是用在類別上,就是看能不能利用這個類別來建立物件。簡單來說,就是看這個東西能不能被外面其他人看到、被誰看到。

public

public int x = 100;

公開,顧名思義就是大家都看得到,所有類別都可以存取這個變數,權限範圍是最大的。

protected

protected int x = 100;

被保護,同一套件的所有類別和不同套件的子類別都可以存取,權限範圍是第二大的。

預設

int x = 100;

如果前面沒有任何修飾子,程式預設就是要同一套件(package)的類別才能存取。

private

private int x = 100;

私人,這個權限範圍是最小的,必須要是同一類別才能存取。

接下來介紹的修飾子就跟存取控制無關ㄌ!

final修飾子

如果一個類別(class)被宣告成final,就表示這個類別不能被繼承。

public final class Name{...}

如果是一個方法(method)被宣告final,則表示這個方法不能被覆寫。
如果是一個變數(variable)被宣告final,表示這個變數在初始化之後,就不能再變更值了,就相當於常數化了。
如果是一個物件參考變數(object reference variable)被宣告final,就是表示這個變數在初始化後,不能再指向另一個物件。

static修飾子

實體變數和方法如果宣告為static,代表這個變數和方法會成為類別變數(靜態變數)和類別方法(靜態方法),反正就是變成靜態的啦~被宣告為static後就不是由任何同類別的物件單獨擁有了,而是由屬於這個類別的所有物件共同擁有。

當類別第一次被載入JVM時,在任何實體被建構之前,靜態的變數和方法就會被載入了,就像是世界被建立的時候就存在的山草花木,所以static方法不可以用到this關鍵字,static方法也不能被覆寫為非static方法。如果被宣告成靜態的方法就不能存取這個類別中其他非靜態的變數和方法,只能存取類別中同為靜態的變數和方法,畢竟世界建立之初也還有沒有人這種後來才出現的東西,不過非靜態的方法就可以存取所有變數和方法,不管是靜態的還是非靜態的。

abstract修飾子

它是一個用來建立抽像類別與方法的,並沒有方法主體,就有點類似只出一張嘴,使用時必須在class或method前面加上這個修飾子,像是

public abstract void myMethod();

如果是抽象類別一樣也不一定有抽象方法,但具有抽象方法的類別一定要是抽象類別,一個類別只要加上abstract關鍵子,即使裡面沒有抽象方法,也就不能使用new,因為抽象類別無法被實體化,不過它可以被繼承,因此可以說抽象類別就是拿來繼承的。而一個子類別如果繼承的是抽象父類別,除非它實作了抽象父類別中的所有抽象方法,不然它一樣只是一個抽象類別。

public abstract class myClass();

好啦以上就是幾種常見的修飾子,有沒有看得很頭痛!當初在學abstract修飾子也好頭痛,抽象類別真的好抽象啊啊啊/images/emoticon/emoticon06.gif


上一篇
[Day18] package & import
下一篇
[Day20] 好像靈異小說會出現的詞 - 介面
系列文
Java入門的30張門票30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言